package cn.thornbird.orgsync.model.wechat;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.util.List;

@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class UserList extends Response {

    @JsonProperty("userlist")
    private List<User> users;


    @Data
    public static class User {

        /**
         * 成员UserID
         */
        @JsonProperty("userid")
        private String userId;

        /**
         * 成员名称
         */
        @JsonProperty("name")
        private String name;

        /**
         * 头像url
         */
        @JsonProperty("avatar")
        private String avatar;

        /**
         * 头像缩略图url
         */
        @JsonProperty("thumb_avatar")
        private String thumbAvatar;

        /**
         * 别名
         */
        @JsonProperty("alias")
        private String alias;

        /**
         * 性别: 0-未定义, 1-男, 2-女
         */
        @JsonProperty("gender")
        private String gender;

        /**
         * 手机号码
         */
        @JsonProperty("mobile")
        private String mobile;

        /**
         * 座机
         */
        @JsonProperty("telephone")
        private String telephone;

        /**
         * 邮箱
         */
        @JsonProperty("email")
        private String email;

        /**
         * 企业邮箱
         */
        @JsonProperty("biz_mail")
        private String bizEmail;

        /**
         * 地址
         */
        @JsonProperty("address")
        private String address;

        /**
         * 全局唯一
         */
        @JsonProperty("open_userid")
        private String openUserId;

        /**
         * 成员所属部门id列表
         */
        @JsonProperty("department")
        private List<Long> department;

        /**
         * 主部门
         */
        @JsonProperty("main_department")
        private Long mainDepartment;

        /**
         * 部门内的排序值
         */
        @JsonProperty("order")
        private List<Long> order;

        /**
         * 表示在所在的部门内是否为部门负责人: 0-否, 1-是
         */
        @JsonProperty("is_leader_in_dept")
        private List<Integer> isLeaderInDepartment;

        /**
         * 直属上级UserID
         */
        @JsonProperty("direct_leader")
        private List<String> directLeader;

        /**
         * 职务信息
         */
        @JsonProperty("position")
        private String position;

        /**
         * 扩展属性
         */
        @JsonProperty("extattr")
        private ExtAttr extAttr;

        /**
         * 激活状态: 1-已激活, 2-已禁用, 4-未激活, 5-退出企业
         */
        @JsonProperty("status")
        private Integer status;

        /**
         * 员工个人二维码
         */
        @JsonProperty("qr_code")
        private String qrCode;

        /**
         * 成员对外属性
         */
        @JsonProperty("external_profile")
        private ExternalProfile externalProfile;

        /**
         * 对外职务
         */
        @JsonProperty("external_position")
        private String externalPosition;

    }


    @Data
    public static class ExtAttr {

        @JsonProperty("attrs")
        private List<Attr> attrs;

    }


    @Data
    public static class Attr {

        /**
         * 0-文本,1-网页
         */
        @JsonProperty("type")
        private Integer type;

        @JsonProperty("name")
        private String name;

        @JsonProperty("text")
        private Text text;

        @JsonProperty("web")
        private Web web;

    }


    @Data
    public static class ExternalProfile {

        @JsonProperty("external_corp_name")
        private String externalCorpName;

        @JsonProperty("wechat_channels")
        private List<WechatChannel> wechatChannels;

        @JsonProperty("external_attr")
        private List<ExternalAttr> externalAttrs;

    }


    @Data
    public static class WechatChannel {

        @JsonProperty("nickname")
        private String nickname;

        /**
         * 对外展示视频状态: 0-企业视频号已被确认,1-企业视频号待确认
         */
        @JsonProperty("status")
        private Integer status;

    }


    @Data
    public static class ExternalAttr {

        /**
         * 0-文本,1-网页,2-小程序
         */
        @JsonProperty("type")
        private Integer type;

        @JsonProperty("name")
        private String name;

        @JsonProperty("text")
        private Text text;

        @JsonProperty("web")
        private Web web;

        @JsonProperty("miniprogram")
        private Miniprogram miniprogram;

    }


    @Data
    public static class Text {

        @JsonProperty("value")
        private String value;

    }


    @Data
    public static class Web {

        @JsonProperty("url")
        private String url;

        @JsonProperty("title")
        private String title;

    }


    @Data
    public static class Miniprogram {

        @JsonProperty("appId")
        private String appId;

        @JsonProperty("title")
        private String title;

        @JsonProperty("pagepath")
        private String pagePath;

    }

}
